'use strict';
const path = require('path');
// 数据加密
const crypto = require('crypto');
const Controller = require('egg').Controller;

class FileController extends Controller {
  /**
     *
     * @api {POST} /api/imgUpload 上传图片、文件（需要token）
     * @apiName 上传图片、文件
     * @apiGroup 文件模块
     * @apiVersion  1.0.0
     *
     *
     * @apiParam  {Object} file 文件列表（form-data格式）   (传文件时调用)
     * @apiParam  {Array} baseArr base64文件数组(base64格式) （传base64格式时调用）
     * 
     *
     * @apiParamExample  {type} Request-Example:
        [
            File,
            File,
            File
        ]
        或者
    {
        "baseArr":[""]
    }
     *
     *
     * @apiSuccessExample {type} Success-Response:
     * {
     *     msg : "成功操作",    
     *     data : [                                                                                         //图片地址数组
                'https://blog-1251395798.cos.ap-guangzhou.myqcloud.com/image/_1629978756129_1.jpeg',        
                'https://blog-1251395798.cos.ap-guangzhou.myqcloud.com/application/_1629978756404_2.pdf',
                'https://blog-1251395798.cos.ap-guangzhou.myqcloud.com/image/_1629978756482_3.jpg' 
            ]
      }
     *
     *
     */
  //图片上传
  async imgUpload() {
    const { ctx, service } = this;
    try {
      this.md5 = crypto.createHash('md5');
      let stream;

      try {
        stream = await ctx.getFileStream();
      } catch (error) {
        ctx.body = ctx.response.error('请上传文件');
      }
      if (!stream) {
        return;
      }
      /** 生成filename，文件存储目录及格式为 /project_name_用户id/_时间戳_文件名 */
      let filename =
        `/_${+new Date()}_` +
        this.md5.update(stream.filename).digest('hex') +
        path.extname(stream.filename).toLocaleLowerCase();
      const cosData = await ctx.helper._upload(filename, stream);

      return ctx.helper.successModule({ path: cosData });
    } catch (error) {
      console.log(error);

      return ctx.helper.errorModule(error.message);
    }
  }
}
module.exports = FileController;
